#!/usr/bin/python
# vim:fileencoding=utf8
"""
Описание класса существительное.
"""

import word

class Noun(word.Word):
    """
    Класс существительное.
    Хранит информацию обо всех формах существительного.
      Формы:
        число: ед., мн.
        падеж: общий, притяжательный.
    """

    ACCEPTABLE_FORMS = {'plurum': (True, False),
             'common': (True, False)}
    
    @staticmethod
    def base_form(word):
        """
        Пытается нагенерить базовую форму существительного.
        На вход получает строку, на выходе имеем список тупликов,
        (база, грамматическая форма). Сори за туфтологию. =\
        """
        res = []
        res.append( (word, {}) )
        
        if word.endswith("'s"):
            res.append((word[:-2], {'common':False}))
        elif word.endswith("s"):
            res.append( (word[:-1], {'plurum':True}) )
            if word.endswith('es'):
                res.append((word[:-2], {'plurum':True}))
        if word.endswith("'"):
            if word.endswith("s'"):
                res.append((word[:-2], {'common':False, 'plurum':True}))
            if word.endswith("es'"):
                res.append((word[:-3], {'common':False, 'plurum':True}))
            res.append((word[:-1], {'common':False, 'plurum':True}))
        return res

    def forms(self, word):
        cur = {}
        if word == self.base + "'s":
            cur = {'common':False}
        elif word == self.base + "s":
            cur = {'plurum':True}
        elif word == self.base + "s'":
            cur = {'common':False, 'plurum':True}
        cur.setdefault('common', True)
        cur.setdefault('plurum', False)
        return [cur]

    
    def get_plurum(self):
        """
        Возвращает множественное число существительного.
        """
        return self.base + 's'
        
    def to_string(self, **form):
        """
        По числу и падежу возвращает строку с существительным.
        """
        plurum = form.get('plurum', False)
        common_case = form.get('common', True)
        if plurum:
            if common_case:
                return self.get_plurum()
            else:
                return self.get_plurum() + "'"
        else:
            if common_case:
                return self.base
            else:
                return self.base + "'s"
